package main

import (
	"fmt"
	"math"
)

/*
给定一个数组arr长度为N，你可以把任意长度大于0小于N的数组前缀作为左半部分，剩下的为右半部分
求最大的，某次划分的左部分最大值减去右部分最大值的绝对值
*/
func findMax(arr []int) int {
	N := len(arr)
	var RMax []int = make([]int, N+1) // 右半部分预处理数组
	RMax[N] = math.MinInt64
	for i := N - 1; i >= 1; i-- {
		RMax[i] = Max(RMax[i+1], arr[i])
	}

	var res int = math.MinInt64
	var LMax int = math.MinInt64
	for i := 0; i <= N-2; i++ {
		LMax = Max(LMax, arr[i])
		res = Max(res, Abs(LMax-RMax[i+1]))
	}
	return res
}

func main() {
	arr := []int{8, 3, 5, -6, 3, 5, 12, -1, 3, 7}
	fmt.Println(findMax(arr))
}

func Max(a int, b int) int {
	if a > b {
		return a
	}
	return b
}

func Abs(a int) int {
	if a >= 0 {
		return a
	}
	return -a
}
